/* Embedded.cpp
Michael Zahniser, 10/18/09

Embedded resources.
*/

#include "Embedded.h"



const string Embedded::ICONS =
	"aaaaaaaaaaaaaaggaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaggaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaggaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaggaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaggaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaggaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaggaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
	"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpaaaaaaaaaackggggggckaaaaaaaaaaaaaaaaaaaaaackggggggckaaaaaaaaaabp"
	"aaaaaaaaaaaaaaggaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaggaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaggaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaggaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaggaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaggaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaggaaaaaaaaaaaaaaaaaaaaaaaaaabfelggelbfaaaaaaaaaaaaaaaaaaaaaabfelggelbfaaaaaackhhgaaaaaaacbmaoklejjleokmacbaaaaaaaaaaaaaacbmaoklejjleokmacbaackhhga"
	"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaminohlejjleohinamaaaaaaaaaaaaaaaminohlejjleohinameclofpafaaaafhohhcbielggelbihcohfkaaaaaaaaaafhohhcbielggelbihcohiflofpaf"
	"aaaaaaaaaaaaaaggaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaggaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaggaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaggaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaggaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaggaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaggaaaaaaaaaaaaaaaaaaaaamnfjjamaaaaaaamjjnfamaaaaaaaaaaamnfjjamaaaaaaamjjokmacaadaaaadjonckggoklejjleokggckondjaaaaaadjonckggoklejjleokggjdpkfcadaa"
	"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaammppppppmmaaaaaaaaaaaaaaaaaaaaaammppppppmmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaammppppppmmaaaaaaaaaaaaaaaaaaaaaammppppppmmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajdjmaaaaaaaaaaaaaajmjdaaaaaaaaaajdjmaaaaaaaaaaamjkokkbaaaaaaaammgmgdncchaaaaaachncgdgmmmaaaaaammgmgdncchaaaaaadbonnohommaaaa"
	"aaaaaaaaaaaaaaggaaaaaaaaaaaaaaaaaaaaaaaammggaaddaaggmmaaaaaaaaaaaaaaaaaammggaaaaaaggmmaaaaaaaaaaaaaaaaaaaaaaaaggaaaaaaaaaaaaaaaaaaaaaaaammggaaddaaggmmaaaaaaaaaaaaaaaaaammggaaaaaaggmmaaaaaaaaaaaaaaaaaaaaaaaaggaaaaaaaaaaaaaaaaaaboohamaaaaaaaaaaaaaaamohboaaaaaaboohamapbbabaaaaibnkcbohboaaaacnobbiokceaaaaaaaaaaceokbiobcnaacnobbiokdbbbabaaaaibnpombiobcnaa"
	"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaappaaaappaaaappaaaaaaaaaaaaaaaaaappaaaaaaaaaappaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaappaaaappaaaappaaaaaaaaaaaaaaaaaappaaaaaaaaaappaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagajpaaaaaaaaaaaaaaaaaajpgaaaaaaagajpaahlkmbeaafemiefaajpgaaaaagdjpgakiaaaaaaaaaaaaaakigajpgdaagdjpgakihlkmbeaafemiefkigajpgdaa"
	"aaaaaaaaaaaaaaggaaggaaggaaggaaggaaaaaaaappddppppppddppggaaggaaggaaaaaaaappddppppppddppggaaggaaggaaaaaaaaaaaaaaggaaggaaggaaggaaggaaaaaaaappddppppppddppggaaggaaggaaaaaaaappddppppppddppggaaggaaggaaaaaaaaaaaaaaggaaaaaaaaaaaaaaaaaahiihaaaaaaaaaaaaaaaaaaiehlaaaaaahiihaaaancgkbanhgkagaaiehlaaaahiihhiihaaaaaaaaaaaaaaiehliehlaahiihhiihaancgkbanhgkagiehliehlaa"
	"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaappaaaappaaaappaaaaaaaaaaaaaaaaaappaaaaaaaaaappaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaappaaaappaaaappaaaaaaaaaaaaaaaaaappaaaaaaaaaappaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagajpaaaaaaaaaaaaaaaaaajpggaaaaaagajpaaaaganfimklbgaaaajpggaaaagdjpgakiaaaaaaaaaaaaaakfgajjgdaagdjpgakiaaganfimklbgaakfgajjgdaa"
	"aaaaaaaaaaaaaaggaaaaaaaaaaaaaaaaaaaaaaaammggaaddaaggmmaaaaaaaaaaaaaaaaaammggaaaaaaggmmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaammggaaddaaggmmaaaaaaaaaaaaaaaaaammggaaaaaaggmmaaaaaaaaaaaaaaaaaaaaaaaaggaaaaaaaaaaaaaaaaaaboohamaaaaaaaaaaaaaaamohboaaaaaaboohamaaalmjmfdmaaaaamohboaaaacnobbiohceaaaaaaaaaaceohbiobcnaacnobbiohcealmjmfdmaaceohbiobcnaa"
	"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaammppppppmmaaaaaaaaaaaaaaaaaaaaaammppppppmmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaammppppppmmaaaaaaaaaaaaaaaaaaaaaammppppppmmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakfjmaaaaaaaaaaaaaajmkiaaaaaaaaaakfjmaaaabpkmbbaaaajmkiaaaaaaaampfkgdncchaaaaaachncgdfhmpaaaaaampfkgdncchbpkmbbchncgdfhmpaaaa"
	"aaaaaaaaaaaaaaggaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaggaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaggaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaggaaaaaaaaaaaaaaaaaaaabfnijjamaaaaaaamjjnibfaaaaaaaaaabfnijjamaaaaaaamjjnibfaaaaaaaadjoechggoklbjglbokggchoedjaaaaaadjoechggoklbjglbokggchoedjaaaa"
	"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamjgohlbjglbohjgamaaaaaaaaaaaaaaamjgohlbjglbohjgamaaaaaaaaaaaagdpagjbieogjeobigjpagdaaaaaaaaaagdpagjbieogjeobigjpagdaaaaaa"
	"aaaaaaaaaaaaaaggaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaggaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaggaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaggaaaaaaaaaaaaaaaaaaaaaaaaaabieogjeobiaaaaaaaaaaaaaaaaaaaaaabieogjeobiaaaaaaaaaaaaaaaaaadjmpohlbjglbohmpdjaaaaaaaaaaaaaadjmpohlbjglbohmpdjaaaaaaaa"
	"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacngggmggcnaaaaaaaaaaaaaaaaaaaaaacngggmggcnaaaaaaaaaaaa";

const string Embedded::PREFERENCES = 
	"#[_] Colors\n"
	"\t[_] Enter colors in hexadecimal form, RRGGBB.\n"
	"\t[_] This is the same color format used in HTML and many other places.\n"
	"\t[_] Each color value can be anything from 00 to FF\n"
	"\t[_] Do not change the indenting of any of these lines.\n"
	"\t[_] If you do, HyperList will not be able to read these preferences anymore.\n"
	"\t[_] icon color\n"
	"\t\t[_] 000000\n"
	"\t[_] text color\n"
	"\t\t[_] 000000\n"
	"\t[_] side back color\n"
	"\t\t[_] FFDD99\n"
	"\t[_] side select color\n"
	"\t\t[_] CCAA66\n"
	"\t[_] side edit color\n"
	"\t\t[_] 997733\n"
	"\t[_] main back color\n"
	"\t\t[_] FFFFDD\n"
	"\t[_] main select color\n"
	"\t\t[_] DDDDBB\n"
	"\t[_] main edit color\n"
	"\t\t[_] BBBB99\n"
	"\t[_] divider color\n"
	"\t\t[_] 000000\n"
	"\t[_] status back color\n"
	"\t\t[_] FFFFFF\n"
	"\t[_] scroll back color\n"
	"\t\t[_] CC9966\n"
	"\t[_] scroll bar color\n"
	"\t\t[_] 996633\n"
	"#[_] Dimensions\n"
	"\t[_] Enter dimension preferences, in pixels\n"
	"\t[_] Do not change the indenting of any of these lines.\n"
	"\t[_] If you do, HyperList will not be able to read these preferences anymore.\n"
	"\t[_] window width\n"
	"\t\t[_] 640\n"
	"\t[_] window height\n"
	"\t\t[_] 480\n"
	"\t[_] category width\n"
	"\t\t[_] 80\n"
	"\t[_] scroll bar width\n"
	"\t\t[_] 10\n"
	"\t[_] scroll bar padding\n"
	"\t\t[_] 2\n"
	"\t[_] text padding\n"
	"\t\t[_] 4\n"
	"\t[_] mouse wheel speed\n"
	"\t\t[_] 4\n";

const string Embedded::HELP =
	"#[_] Help\n"
	"\t[[_]] Welcome to HyperList. This is the main Help page.\n"
	"\t\t[_] To exit help, press ^H (control + H, or command + H on the Macintosh)\n"
	"\t\t[_] ^Q quits Hyperlist. You can also click the close box on the window.\n"
	"\t[[_]] About HyperList\n"
	"\t\t[_] HyperList is a program for managing hierarchical to-do lists.\n"
	"\t\t[_] Each line of the main view represents a different task\n"
	"\t\t\t[_] Tasks are stored in a tree or \"outline\" view.\n"
	"\t\t[_] Each task can be marked as:\n"
	"\t\t\t[x] Checked off (completed)\n"
	"\t\t\t[[_]] Emphasized (high priority)\n"
	"\t\t\t{_} Crossed out (deleted, doesn't have to be done)\n"
	"\t\t\t{{x}} Some combination of the above\n"
	"\t\t[_] Tasks can also have a date associated with them, in various formats:\n"
	"\t\t\t[_] A full date (8 Feb 2008)\n"
	"\t\t\t[_] A month and year, with no day specified (Feb 2008)\n"
	"\t\t\t[_] A month and day, e.g. a holiday, or a birthday with unknown year (8 Feb)\n"
	"\t\t\t[_] A year (2008)\n"
	"\t\t[_] The sidebar on the left is a list of categories.\n"
	"\t\t\t[_] Each category contains a separate list of tasks.\n"
	"\t[[_]] Using HyperList\n"
	"\t\t[_] Use the arrow keys or the mouse to navigate through the list.\n"
	"\t\t\t[_] The left and right arrow keys expand and collapse trees.\n"
	"\t\t[_] Press Return to add a new task after the current one, then type in the text of the task.\n"
	"\t\t\t[_] You can try it here, if you want. Changes to the help file are not saved.\n"
	"\t\t\t[_] Press Return to finish entering text, or Tab to enter a date as well.\n"
	"\t\t\t[_] Press shift + return to add a task as a child of the current task.\n"
	"\t\t[x] Press the . key (period) to toggle a task between checked and unchecked.\n"
	"\t\t[[_]] Press the = key to toggle between emphasized and unemphasized.\n"
	"\t\t{_} Press delete to cross out a task.\n"
	"\t\t[_] Use the mouse wheel to scroll the view, or click and drag the scroll bar.\n"
	"\t\t[_] All of your lists and preferences are automatically saved when you quit (^Q).\n"
	"\t\t[_] To save without quitting, press ^S.\n"
	"\t\t[_] To revert to the last saved version, press ^R.\n"
	"\t\t[_] Click on the \"Commands\" category on the left for a full list of commands.\n"
	"\t[[_]] Features of HyperList\n"
	"\t\t[_] HyperList runs on Mac OS X, Windows, and Linux.\n"
	"\t\t[_] HyperList is designed to be used entirely with the keyboard.\n"
	"\t\t\t[_] The mouse is also supported, but the keyboard is usually more efficient.\n"
	"\t\t[_] Search for text by pressing the / key, then entering text\n"
	"\t\t[_] Sort a set of tasks by date or by text (^D and ^T)\n"
	"\t\t[_] Copy and paste lists from other applications\n"
	"#[_] Commands\n"
	"\t[_] Command keys\n"
	"\t\t[_] Note: ^Q means control + Q. On the Mac, the command key can be used instead.\n"
	"\t\t[_] ^Q: Quit\n"
	"\t\t\t[_] Note: the list is automatically saved when you quit.\n"
	"\t\t\t\t[_] To quit without saving changes, revert (^R) before quitting\n"
	"\t\t[_] ^S: Save\n"
	"\t\t[_] ^R: Revert to last saved version\n"
	"\t\t\t[_] + shift: Restore all deleted categories.\n"
	"\t\t[_] ^X: Cut selected task(s)\n"
	"\t\t\t[_] When editing text, cut selected text\n"
	"\t\t[_] ^C: Copy selected task(s)\n"
	"\t\t\t[_] When editing text, copy selected text\n"
	"\t\t\t[_] + shift: Copy selected tasks without copying flags (check marks, etc)\n"
	"\t\t\t\t[_] This makes a copy of the task suitable for pasting into a different program.\n"
	"\t\t[_] ^V: Paste tasks from the clipboard\n"
	"\t\t\t[_] When editing text, paste over the selected text\n"
	"\t\t[_] ^A: Select all tasks in the current category\n"
	"\t\t\t[_] When editing text, select the entire text field\n"
	"\t\t[_] ^H: Toggle between help view and main view\n"
	"\t\t[_] ^P: Toggle between preferences view and main view\n"
	"\t\t[_] ^D: Sort all siblings of the current task by date.\n"
	"\t\t\t[_] +shift: Reverse the sort order.\n"
	"\t\t[_] ^T: Sort all siblings of the current task by text.\n"
	"\t\t\t[_] +shift: Reverse the sort order.\n"
	"\t[_] Mouse control\n"
	"\t\t[_] Click on a category name to select it.\n"
	"\t\t\t[_] Click again to edit its name.\n"
	"\t\t[_] Click on the +/- box to expand or collapse a tree.\n"
	"\t\t\t[_] + shift: Expand or collapse all sub-trees, as well\n"
	"\t\t[_] Click on the circle before a line to check or uncheck.\n"
	"\t\t\t[_] + shift: Check or uncheck all tasks in the tree, not just the root\n"
	"\t\t[_] Click on a line in the task list to select it.\n"
	"\t\t\t[_] + shift: Select a range of tasks\n"
	"\t\t[_] Click on the text of a selected task to edit the text.\n"
	"\t\t[_] Click on the date (or to the right of the text) of a selected task to edit it.\n"
	"\t\t[_] Click and drag the scroll bar to scroll the view.\n"
	"\t\t[_] Use the mouse wheel to scroll the view.\n"
	"\t\t\t[_] The distance the view scrolls with each wheel click can be changed in preferences.\n"
	"\t[_] Navigating\n"
	"\t\t[_] Page up: Scroll up one page\n"
	"\t\t[_] Page down: Scroll down one page\n"
	"\t\t[_] Home: Scroll to top\n"
	"\t\t[_] End: Scroll to bottom\n"
	"\t\t[_] Up arrow: Select previous row\n"
	"\t\t\t[_] + shift: Expand row selection to include previous row\n"
	"\t\t\t[_] + control: Move selected task(s) up\n"
	"\t\t\t[_] + alt: Select previous category\n"
	"\t\t\t[_] + alt + control: Move selected category up\n"
	"\t\t[_] Down arrow: Select next row\n"
	"\t\t\t[_] + shift: Expand row selection to include next row\n"
	"\t\t\t[_] + control: Move selected task(s) down\n"
	"\t\t\t[_] + alt: Select next category\n"
	"\t\t\t[_] + alt + control: Move selected category down\n"
	"\t\t[_] Left arrow: Collapse the selected task(s)\n"
	"\t\t\t[_] + shift: Collapse all sub-trees, as well\n"
	"\t\t\t[_] + control: Outdent the selected tasks\n"
	"\t\t\t[_] When editing text, move the cursor to the left\n"
	"\t\t\t\t[_] + shift: expand selection to the left\n"
	"\t\t[_] Right arrow: Expand the selected task(s)\n"
	"\t\t\t[_] +shift: Expand all sub-trees, as well\n"
	"\t\t\t[_] +control: Indent the selected task(s)\n"
	"\t\t\t[_] When editing text, move the cursor to the right\n"
	"\t\t\t\t[_] + shift: expand selection to the right\n"
	"\t\t[_] [ (left bracket): Select previous sibling of current task\n"
	"\t\t\t[_] + shift: Select parent of current task\n"
	"\t\t[_] ] (right bracket): Select next sibling of current task\n"
	"\t\t\t[_] + shift: Select next row\n"
	"\t[_] Editing\n"
	"\t\t[_] Return: Create a new task as the next sibling of the currently selected task\n"
	"\t\t\t[_] + shift: Create a new task as the first child of the currently selected task\n"
	"\t\t[_] . (period): Toggle the check marks on the selected task(s)\n"
	"\t\t\t[_] + shift: Toggle the check marks on all children of the selected task(s), too\n"
	"\t\t[_] = (equals sign): Toggle the emphasis of the selected task(s)\n"
	"\t\t\t[_] + shift: Toggle the emphasis of all children of the selected task(s), too\n"
	"\t\t[_] Delete or Backspace: Toggle crossing out of the selected task(s)\n"
	"\t\t\t[_] + shift: Toggle crossing out of all children of the selected task(s), too\n"
	"\t\t\t[_] + control: Remove the selected task(s) permanently from the list\n"
	"\t\t\t[_] + alt: Delete the current category and all tasks in it\n"
	"\t\t\t\t[_] Note: If you delete a category by mistake, shift + ^R will restore it.\n"
	"\t\t\t\t[_] Alternatively, you can revert to the last saved version with ^R.\n"
	"\t\t\t[_] When editing text: Delete the selected text\n"
	"\t\t\t\t[_] If no text is selected, deletes one character before the cursor.\n"
	"\t\t[_] Tab: Edit the text of the selected task\n"
	"\t\t\t[_] + shift: Edit the date of the selected task\n"
	"\t\t\t[_] If currently editing a field, Tab selects the next field in the selected tasks\n"
	"\t[_] Searching\n"
	"\t\t[_] / (forward slash): Search for lines beginning with entered text\n"
	"\t\t\t[_] + shift: Search for lines containing entered text\n"
	"\t\t[_] When searching, type in text to view the first match to that text.\n"
	"\t\t[_] Tab: view the next match to the currently entered text\n"
	"\t\t[_] Return: exit search mode\n"
	"#[_] Example\n"
	"\t[[_]] Here is an example showing how HyperList can be used.\n"
	"\t\t[[_]] Yes, HyperList was indeed used in the development of HyperList.\n"
	"\t[[_]] \n"
	"\t[x] Get HyperList latest version running on Linux.\n"
	"\t[x] Help screen:\n"
	"\t\t[x] Introduction / walkthrough\n"
	"\t\t[x] Summary of all commands\n"
	"\t[_] Filtering\n"
	"\t\t[_] Option to hide / show normal, checked, and deleted items.\n"
	"\t\t[_] Hidden items can cause an expanded node to have no visible children\n"
	"\t\t\t[_] So, add a SHOW_EXPANDABLE flag or something to Task's temporary flags.\n"
	"\t\t[_] Show three boxes on bottom of category list with icons for three filters.\n"
	"\t\t[_] Replace SHOW_IN_UNCHECKED, etc. flags with TaskList filter function.\n"
	"\t\t[_] Option to show only tasks for this day / week\n"
	"\t[_] Mouse control\n"
	"\t\t[_] Click and drag to move items?\n"
	"\t\t[_] Move cursor within a line of text?\n"
	"\t\t[x] Scroll with click + drag and with mouse wheel.\n"
	"\t\t[x] Click on a category to select it.\n"
	"\t\t\t[x] Click again to edit it.\n"
	"\t\t[x] Click on a row to select it.\n"
	"\t\t\t[x] If click was on the expand box, also toggle expansion.\n"
	"\t\t\t[x] If on check box, also toggle check\n"
	"\t\t\t[x] Click on text of selected row to edit it\n"
	"\t\t\t[x] Click after text of selected row to edit date.\n"
	"\t\t[x] Shift + click to select a range\n"
	"\t[x] Cut and paste\n"
	"\t\t[x] Clipboard access on different systems?\n"
	"\t\t\t[x] Windows\n"
	"\t\t\t[x] Mac OS X\n"
	"\t\t\t[x] Linux\n"
	"\t\t[x] Functions to convert list to text:\n"
	"\t\t\t[x] Depth becomes tabs, flags become different marker?\n"
	"\t\t\t[x] This should be a member of Task.\n"
	"\t[_] Clean up code\n"
	"\t\t[_] Draw only the regions of the window that must be updated.\n"
	"\t\t\t[_] If tree has changed, whole tree.\n"
	"\t\t\t[_] Else if editing row, that row.\n"
	"\t\t\t[_] Else if categories have changed, all categories\n"
	"\t\t[_] Comments\n"
	"\t\t[_] Fix window blink on startup?\n"
	"\t\t[_] Better algorithms\n"
	"\t\t\t[[x]] Keep all categories in a list, not a vector.\n"
	"\t\t\t\t[[x]] This removes the need for TaskList::Swap()\n"
	"\t\t[x] Put selected row into TaskList\n"
	"\t\t[x] Split Display into Display + Editor\n"
	"\t\t[x] Get SDL_Event filtering working.\n"
	"\t\t[[x]] Give Color an operator>> and use it for reading preferences.\n"
	"\t\t[[x]] Move category list management from Editor into a CategoryList class\n"
	"\t\t\t[x] CategoryList : private list<TreeList>?\n"
	"\t\t\t[x] Change edit mode on switch or add category.\n"
	"\t\t\t[x] Initialize Editor with reference to CategoryList's iterator, for convenience\n"
	"\t\t\t\t[x] CategoryList: typedef Iterator.\n"
	"\t\t[[x]] Editor exposing basic interface of TaskList instead of forwarding\n"
	"\t\t\t[[x]] Move most of TaskList into a derived class.\n"
	"\t\t\t{_} Don't allow copying of TaskList.\n"
	"\t\t\t\t{_} no. Must be allowed, to construct lists of TaskList.\n"
	"\t\t[x] Consistently pass SDL_Surface * instead of &.\n"
	"\t\t[x] Robustness (date input, etc.)\n"
	"\t\t[x] Would storing cursor as position + offset simplify shift-arrow selection?\n"
	"\t\t\t[x] Yes, but would make drawing the selection more complicated.\n"
	"\t[x] Recursive toggle: set all to base toggled, not toggle all.\n"
	"\t[x] Status box: don't overwrite scroll bar.\n"
	"\t[x] Editor should get page rows from Display (for page up / down).\n"
	"\t[x] Bug: selection disappears on delete line\n"
	"\t[[x]] Sorting\n"
	"\t\t[[x]] Get sort to consider A == a.\n"
	"\t\t\t[x] strcoll _should_work.\n"
	"\t\t[x] Add sort functions to TaskList.\n"
	"\t\t[x] Sorting on the root node sorts all its children.\n"
	"\t\t[x] Define IsBefore() time comparison operator for Task.\n"
	"\t\t\t[x] How should \"ignore\" dates be handled?\n"
	"\t\t\t[x] For to-do lists, dated items should come before undated.\n"
	"\t\t\t{x} For birthdays, items with years should be in line with items without.\n"
	"\t\t\t{x} So: have separate \"Time\" and \"Date\" sorts?\n"
	"\t\t\t\t{x} No, just let the birthday list be sorted manually.\n"
	"\t\t[x] ^A to sort alphabetically, ^D to sort by date. Shift to reverse order.\n"
	"\t[x] How to notify user that save succeeded, etc?\n"
	"\t\t[x] Temporary bar displayed across the screen until next key press?\n"
	"\t\t[x] Filter out all events but key down and quit events.\n"
	"\t[x] Search\n"
	"\t\t{_} Move searching into TaskList\n"
	"\t\t\t{_} Search includes non-expanded rows.\n"
	"\t\t[x] Search anywhere in text, not just beginning of line, with shift + /\n"
	"\t\t[x] Cycle between all search hits: TAB while in search mode?\n"
	"\t[x] Select multiple lines\n"
	"\t\t[x] Tab cycling through fields in all selected lines, beginning with first.\n"
	"\t\t\t[x] Implement in Display, not TaskList.\n"
	"\t\t[x] Draw selection of multiple lines.\n"
	"\t\t[x] Mark multiple lines\n"
	"\t\t[x] Open or close multiple lines\n"
	"\t\t[x] Delete multiple lines\n"
	"\t\t[x] Move multiple lines\n"
	"\t\t[x] Create a selection object with members anchor and offset.\n"
	"\t\t\t[x] Member functions: First(), Last(), Anchor(), Cursor(), Offset(), IsSingle()\n"
	"\t\t\t[x] Operator==(int) compares to whatever counts as _the_ selected row\n"
	"\t\t\t\t[x] Implemented just by overriding the int typecast.\n"
	"\t\t\t\t[x] -> probably the cursor position.\n"
	"\t\t\t[x] Use preincrement and postincrement operators?\n"
	"\t\t\t\t[x] Preincrement to change anchor, post to change cursor\n"
	"\t\t\t\t[x] Is this logical enough to be an OK extension of the operators? Sure.\n"
	"\t\t[x] Recursive commands become non-recursive when operating on multiple lines\n"
	"\t\t\t[x] This avoids having the same command modify one line twice.\n"
	"\t\t\t[x] How to handle shift+close on, say, the first two rows of this tree?\n"
	"\t\t\t\t[x] Will always applying command from bottom to top fix it?\n"
	"\t\t[x] How to select multiple lines? Shift + up and down already do something.\n"
	"\t\t\t[x] Define new commands for: next / prev sibling, parent / next sibling of parent\n"
	"\t\t\t\t[x] Brackets and braces, perhaps?\n"
	"\t[x] Customization of colors\n"
	"\t\t[x] Set font color to any color.\n"
	"\t\t\t[x] Set icon color as well.\n"
	"\t\t\t[x] Glyph class containing SetColor().\n"
	"\t\t[x] In-program editing of preferences?\n"
	"\t\t[x] Perhaps edit the preferences in tree mode, like everything else?\n"
	"\t\t\t[x] Set of nodes for tags, children for values.\n"
	"\t[x] Bug: indent: wrong line ends up selected if indenting into previously unexpanded branch\n"
	"\t{_} Status bar?\n"
	"\t[[x]] Help screen: a separate tree describing all available commands.\n"
	"\t\t[x] Bring up the help screen by typing ^H.\n"
	"\t\t[x] Load the help fresh from \"help.txt\" each time, and let user edit it.\n"
	"\t\t[x] For now, the help screen can be saved. Eventually, disable saving.\n"
	"\t[x] Font width calculation: option to continue from most recent character entered.\n"
	"\t\t[x] This allows more accurate placement of the selection box.\n"
	"\t\t\t[x] This will keep the selection box from wiggling on shift + left.\n"
	"\t[x] Bug displaying list when scrolled so first item is indented.\n"
	"\t[x] Database. (20 Jan 1908)\n"
	"\t\t[x] Use row index instead of iterators\n"
	"\t\t\t[x] Hide iterators and list interface.\n"
	"\t\t{_} In dates, special value for unknown (e.g. birthday year unknown). Valid formats:\n"
	"\t\t\t{_} m/d/y, m/d, d, m/./y, m/, ././y, 'y, ?/d/y, ?/?/y, ?/?/?, m/?/y, m/?/?, m/d/?\n"
	"\t\t\t{_} Output: mm/dd/yy, mm/yy, 'yy (where any can be ?).\n"
	"\t\t\t{_} Also mm/dd/, /dd/, mm/, /yy, {\\0}\n"
	"\t\t[x] Dates: format mm/dd/yy. Interpretation rules:\n"
	"\t\t\t[x] Anything before all punctuation is a month.\n"
	"\t\t\t[x] Anything after all punctuation is a year\n"
	"\t\t\t[x] Days have punctuation before and after.\n"
	"\t\t\t\t[x] Special case: enter number alone to interpret it as next day with that date.\n"
	"\t\t\t[x] Period is wildcard (\"next valid value, from today\").\n"
	"\t\t\t[x] Punctuation is implied by periods; e.g. \".2.\" = \"./2/.\"\n"
	"\t\t[x] Handle loading empty database\n"
	"\t[x] Define TaskList::Swap for faster insertion and reordering of categories\n"
	"\t[x] Save option, for the paranoid.\n"
	"\t[x] Emphasized (high priority) items: double circle.\n"
	"\t\t[x] Split flags into saved flags and view-only flags (filters).\n"
	"\t\t[x] + key emphasizes.\n"
	"\t\t[x] Make images for double circle.\n"
	"\t[x] Home selects entire tree (not first row).\n"
	"\t[x] SDL library for drawing text. (19 Jan 1908)\n"
	"\t[x] Display tree. (19 Jan 1908)\n"
	"\t\t[x] Check boxes.\n"
	"\t\t[x] Indentation. (19 Jan 1908)\n"
	"\t\t[x] Selected item\n"
	"\t\t[x] Filter based on check / deleted.\n"
	"\t[x] Categories\n"
	"\t\t[x] Display on left hand side\n"
	"\t\t[x] Add category\n"
	"\t\t[x] Change category name\n"
	"\t\t[x] Delete category\n"
	"\t[x] Dotted lines\n"
	"\t\t[x] Do not work right for end of list\n"
	"\t\t[x] Need icon for expanded end.\n"
	"\t\t[x] Get working for sub-trees (see below)\n"
	"\t[x] Editing the tree\n"
	"\t\t[x] Indent or outdent item\n"
	"\t\t[x] Move item up or down.\n"
	"\t\t[x] \"Real\" delete.\n"
	"\t[x] ctl-shift-r \"resurrect\" all deleted categories.\n"
	"\t\t[x] todo_deleted file storing deleted categories\n"
	"\t[x] View\n"
	"\t\t[x] Scroll the view.\n"
	"\t\t[x] Draw scroll bar.\n"
	"\t\t[x] Define colors as constants somewhere.\n"
	"\t[x] Edit text\n"
	"\t\t[x] Search string.\n"
	"\t\t[x] Text and dates\n"
	"\t\t\t[x] Enter text.\n"
	"\t\t\t[x] Edit existing text.\n"
	"\t\t\t\t[x] Cursor within text\n"
	"\t\t\t\t\t[x] Positioning with arrows and shift-arrows.\n"
	"\t\t\t\t\t[x] Display cursor.\n"
	"\t\t\t\t\t[x] On typing, replace selection.\n";
